package com.yunkss.eftool.business.result;

import lombok.Data;
import lombok.experimental.Accessors;

import java.util.List;

/**
 * @Author csx
 * @Date 2024/4/23 8:23
 * @Description TODO  EfResult  统一响应对象
 **/
@Data
@Accessors(chain = true)
public class EfResult<T> {

    /**
     * 是否成功标识
     */
    private Boolean success;

    /**
     * 返回消息
     */
    private String message;

    /**
     * 返回数据
     */
    private List<T> dataTable;

    /**
     * 返回数据
     */
    private T dataRow;

    /**
     * 自定义错误编码
     */
    private String csxErrorCode;


    /**
     * 成功返回
     *
     * @param message
     * @param dataRow
     * @param <T>
     * @return
     */
    public static <T> EfResult<T> success(String message, T dataRow) {
        return new EfResult<T>().setSuccess(true).setMessage(message).setDataRow(dataRow);
    }

    /**
     * 成功返回
     *
     * @param dataTable
     * @param <T>
     * @return
     */
    public static <T> EfResult<T> success(String message, List<T> dataTable) {
        return new EfResult<T>().setSuccess(true).setMessage(message).setDataTable(dataTable);
    }

    /**
     * 成功返回
     *
     * @param message
     * @param <T>
     * @return
     */
    public static <T> EfResult<T> success(String message) {
        return new EfResult<T>().setSuccess(true).setMessage(message);
    }

    /**
     * 失败返回
     *
     * @param message
     * @param <T>
     * @return
     */
    public static <T> EfResult<T> fail(String csxErrorCode, String message) {
        return new EfResult<T>().setSuccess(false).setCsxErrorCode(csxErrorCode).setMessage(message);
    }

    /**
     * 失败返回
     *
     * @param message
     * @param dataRow
     * @param <T>
     * @return
     */
    public static <T> EfResult<T> fail(String message, T dataRow) {
        return new EfResult<T>().setSuccess(false).setMessage(message).setDataRow(dataRow);
    }

    /**
     * 失败返回
     *
     * @param message
     * @param dataTable
     * @param <T>
     * @return
     */
    public static <T> EfResult<T> fail(String csxErrorCode, String message, List<T> dataTable) {
        return new EfResult<T>().setSuccess(false).setCsxErrorCode(csxErrorCode).setMessage(message).setDataTable(dataTable);
    }

}
